home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / mult_submits.inc.php < prev    next >
PHP Script  |  2005-01-11  |  16KB  |  436 lines

  1. <?php
  2. /* $Id: mult_submits.inc.php,v 2.13 2005/01/12 00:31:42 rabus Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5.  
  6. /**
  7.  * Prepares the work and runs some other scripts if required
  8.  */
  9. if (!empty($submit_mult)
  10.     && ($submit_mult != $strWithChecked)
  11.     && (  !empty($selected_db)
  12.        || !empty($selected_tbl)
  13.        || !empty($selected_fld)
  14.        || !empty($rows_to_delete)
  15.          )) {
  16.  
  17.     if (!empty($selected_db)) {
  18.         $selected     = $selected_db;
  19.         $what         = 'drop_db';
  20.     } else if (!empty($selected_tbl)) {
  21.         if ($submit_mult == $strPrintView) {
  22.             require('./tbl_printview.php');
  23.         } else {
  24.            $selected = $selected_tbl;
  25.            switch ($submit_mult) {
  26.                case 'drop_db':
  27.                    $what = 'drop_db';
  28.                    break;
  29.                case $strDrop:
  30.                    $what = 'drop_tbl';
  31.                    break;
  32.                case $strEmpty:
  33.                    $what = 'empty_tbl';
  34.                    break;
  35.                case $strCheckTable:
  36.                    unset($submit_mult);
  37.                    $query_type = 'check_tbl';
  38.                    $mult_btn   = $strYes;
  39.                    break;
  40.                case $strOptimizeTable:
  41.                    unset($submit_mult);
  42.                    $query_type = 'optimize_tbl';
  43.                    $mult_btn   = $strYes;
  44.                    break;
  45.                case $strRepairTable:
  46.                    unset($submit_mult);
  47.                    $query_type = 'repair_tbl';
  48.                    $mult_btn   = $strYes;
  49.                    break;
  50.                case $strAnalyzeTable:
  51.                    unset($submit_mult);
  52.                    $query_type = 'analyze_tbl';
  53.                    $mult_btn   = $strYes;
  54.                    break;
  55.            } // end switch
  56.         }
  57.     } else if (!empty($selected_fld)) {
  58.         $selected     = $selected_fld;
  59.         switch ($submit_mult) {
  60.             case $strDrop:
  61.                 $what     = 'drop_fld';
  62.                 break;
  63.             case $strPrimary:
  64.                 // Gets table primary key
  65.                 PMA_DBI_select_db($db);
  66.                 $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  67.                 $primary     = '';
  68.                 while ($row = PMA_DBI_fetch_assoc($result)) {
  69.                     // Backups the list of primary keys
  70.                     if ($row['Key_name'] == 'PRIMARY') {
  71.                         $primary .= $row['Column_name'] . ', ';
  72.                     }
  73.                 } // end while
  74.                 PMA_DBI_free_result($result);
  75.                 if (empty($primary)) {
  76.                     // no primary key, so we can safely create new
  77.                     unset($submit_mult);
  78.                     $query_type = 'primary_fld';
  79.                     $mult_btn   = $strYes;
  80.                 } else {
  81.                     // primary key exists, so lets as user
  82.                     $what = 'primary_fld';
  83.                 }
  84.                 break;
  85.             case $strIndex:
  86.                 unset($submit_mult);
  87.                 $query_type = 'index_fld';
  88.                 $mult_btn   = $strYes;
  89.                 break;
  90.             case $strUnique:
  91.                 unset($submit_mult);
  92.                 $query_type = 'unique_fld';
  93.                 $mult_btn   = $strYes;
  94.                 break;
  95.             case $strIdxFulltext:
  96.                 unset($submit_mult);
  97.                 $query_type = 'fulltext_fld';
  98.                 $mult_btn   = $strYes;
  99.                 break;
  100.             case $strChange:
  101.                 require('./tbl_alter.php');
  102.                 break;
  103.         }
  104.     } else {
  105.         $what = 'row_delete';
  106.         $selected = $rows_to_delete;
  107.     }
  108. } // end if
  109.  
  110.  
  111. /**
  112.  * Displays the confirmation form if required
  113.  */
  114. if (!empty($submit_mult) && !empty($what)) {
  115.     $js_to_run = 'functions.js';
  116.     unset($message);
  117.     if (!empty($table)) {
  118.         require('./tbl_properties_common.php');
  119.         $url_query .= '&goto=tbl_properties.php&back=tbl_properties.php';
  120.         require('./tbl_properties_table_info.php');
  121.     }
  122.     elseif (!empty($db)) {
  123.         require('./db_details_common.php');
  124.         require('./db_details_db_info.php');
  125.     }
  126.     // Builds the query
  127.     $full_query     = '';
  128.     if ($what == 'drop_tbl') {
  129.         $full_query_views = '';
  130.     }
  131.     $selected_cnt   = count($selected);
  132.     $i = 0;
  133.     foreach ($selected AS $idx => $sval) {
  134.         switch ($what) {
  135.             case 'row_delete':
  136.                 $full_query .= htmlspecialchars(urldecode($sval))
  137.                             . ';<br />';
  138.                 break;
  139.             case 'drop_db':
  140.                 $full_query .= 'DROP DATABASE '
  141.                             . PMA_backquote(htmlspecialchars(urldecode($sval)))
  142.                             . ';<br />';
  143.                 break;
  144.  
  145.             case 'drop_tbl':
  146.             $current = urldecode($sval);
  147.         if (!empty($views) && in_array($current, $views)) {
  148.                     $full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ')
  149.                                . PMA_backquote(htmlspecialchars($current));
  150.         } else {
  151.                     $full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ')
  152.                                 . PMA_backquote(htmlspecialchars($current));
  153.                 }
  154.                 break;
  155.  
  156.             case 'empty_tbl':
  157.                 if (PMA_MYSQL_INT_VERSION >= 40000) {
  158.                     $full_query .= 'TRUNCATE ';
  159.                 } else {
  160.                     $full_query .= 'DELETE FROM ';
  161.                 }
  162.                 $full_query .= PMA_backquote(htmlspecialchars(urldecode($sval)))
  163.                             . ';<br />';
  164.                 break;
  165.  
  166.             case 'primary_fld':
  167.                 if ($full_query == '') {
  168.                     $full_query .= 'ALTER TABLE '
  169.                                 . PMA_backquote(htmlspecialchars($table))
  170.                                 . '<br />  DROP PRIMARY KEY,'
  171.                                 . '<br />   ADD PRIMARY KEY('
  172.                                 . '<br />     '
  173.                                 . PMA_backquote(htmlspecialchars(urldecode($sval)))
  174.                                 . ',';
  175.                 } else {
  176.                     $full_query .= '<br />     '
  177.                                 . PMA_backquote(htmlspecialchars(urldecode($sval)))
  178.                                 . ',';
  179.                 }
  180.                 if ($i == $selected_cnt-1) {
  181.                     $full_query = preg_replace('@,$@', ');<br />', $full_query);
  182.                 }
  183.                 break;
  184.                 
  185.             case 'drop_fld':
  186.                 if ($full_query == '') {
  187.                     $full_query .= 'ALTER TABLE '
  188.                                 . PMA_backquote(htmlspecialchars($table))
  189.                                 . '<br />  DROP '
  190.                                 . PMA_backquote(htmlspecialchars(urldecode($sval)))
  191.                                 . ',';
  192.                 } else {
  193.                     $full_query .= '<br />  DROP '
  194.                                 . PMA_backquote(htmlspecialchars(urldecode($sval)))
  195.                                 . ',';
  196.                 }
  197.                 if ($i == $selected_cnt-1) {
  198.                     $full_query = preg_replace('@,$@', ';<br />', $full_query);
  199.                 }
  200.                 break;
  201.         } // end switch
  202.         $i++;
  203.     }
  204.     if ($what == 'drop_tbl') {
  205.         if (!empty($full_query)) {
  206.         $full_query .= ';<br />' . "\n";
  207.     }
  208.     if (!empty($full_query_views)) {
  209.         $full_query .= $full_query_views . ';<br />' . "\n";
  210.     }
  211.     unset($full_query_views);
  212.     }
  213.  
  214.     // Displays the form
  215. ?>
  216. <!-- Do it really ? -->
  217. <table border="0" cellpadding="3" cellspacing="0">
  218.     <tr>
  219.         <th class="tblHeadError" align="left">
  220.             <?php
  221.     echo ($GLOBALS['cfg']['ErrorIconic'] ? '<img src="' . $GLOBALS['pmaThemeImage'] . 's_really.png" border="0" hspace="2" width="11" height="11" valign="middle" />' : '');
  222.     echo $strDoYouReally . ': ' . "\n";
  223.             ?>
  224.         </th>
  225.     </tr>
  226.     <tr>
  227.         <td bgcolor="<?php echo $GLOBALS['cfg']['BgcolorOne']; ?>">
  228.            <?php
  229.     echo '<tt>' . $full_query . '</tt> ?<br/>' . "\n";
  230.            ?>
  231.         </td>
  232.     </tr>
  233.     <tr>
  234.        <td align="right" nowrap="nowrap">
  235. <form action="<?php echo $action; ?>" method="post">
  236.     <?php
  237.     echo "\n";
  238.     if (strpos(' ' . $action, 'db_details') == 1) {
  239.         echo PMA_generate_common_hidden_inputs($db);
  240.     } else if (strpos(' ' . $action, 'tbl_properties') == 1
  241.               || $what == 'row_delete') {
  242.         echo PMA_generate_common_hidden_inputs($db,$table);
  243.     } else  {
  244.         echo PMA_generate_common_hidden_inputs();
  245.     }
  246.     foreach ($selected AS $idx => $sval) {
  247.         echo '    <input type="hidden" name="selected[]" value="' . htmlspecialchars($sval) . '" />' . "\n";
  248.     }
  249.     if ($what == 'drop_tbl' && !empty($views)) {
  250.         foreach ($views as $current) {
  251.         echo '    <input type="hidden" name="views[]" value="' . htmlspecialchars($current) . '" />' . "\n";
  252.     }
  253.     }
  254.     ?>
  255.     <input type="hidden" name="query_type" value="<?php echo $what; ?>" />
  256.     <?php
  257.     if ($what == 'row_delete') {
  258.         echo '<input type="hidden" name="original_sql_query" value="' . htmlspecialchars($original_sql_query) . '" />' . "\n";
  259.         echo '<input type="hidden" name="original_pos" value="' . $original_pos . '" />' . "\n";
  260.         echo '<input type="hidden" name="original_url_query" value="' . htmlspecialchars($original_url_query) . '" />' . "\n";
  261.     }
  262.     ?>
  263.     <input type="submit" name="mult_btn" value="<?php echo $strYes; ?>" id="buttonYes" />
  264.     <input type="submit" name="mult_btn" value="<?php echo $strNo; ?>" id="buttonNo" />
  265. </form>
  266.         </td>
  267.     </tr>
  268. </table>
  269.     <?php
  270.     echo"\n";
  271.  
  272.     require_once('./footer.inc.php');
  273. } // end if
  274.  
  275.  
  276. /**
  277.  * Executes the query
  278.  */
  279. else if ($mult_btn == $strYes) {
  280.  
  281.     if ($query_type == 'drop_db' || $query_type == 'drop_tbl' || $query_type == 'drop_fld') {
  282.         require_once('./libraries/relation_cleanup.lib.php');
  283.     }
  284.  
  285.     $sql_query      = '';
  286.     if ($query_type == 'drop_tbl') {
  287.         $sql_query_views = '';
  288.     }
  289.     $selected_cnt   = count($selected);
  290.     $run_parts      = FALSE; // whether to run query after each pass
  291.     $use_sql        = FALSE; // whether to include sql.php at the end (to display results)
  292.  
  293.     if ($query_type == 'primary_fld') {
  294.         // Gets table primary key
  295.         PMA_DBI_select_db($db);
  296.         $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  297.         $primary     = '';
  298.         while ($row = PMA_DBI_fetch_assoc($result)) {
  299.             // Backups the list of primary keys
  300.             if ($row['Key_name'] == 'PRIMARY') {
  301.                 $primary .= $row['Column_name'] . ', ';
  302.             }
  303.         } // end while
  304.         PMA_DBI_free_result($result);
  305.     }
  306.     
  307.     for ($i = 0; $i < $selected_cnt; $i++) {
  308.         switch ($query_type) {
  309.             case 'row_delete':
  310.                 $a_query = urldecode($selected[$i]);
  311.                 $run_parts = TRUE;
  312.                 break;
  313.  
  314.             case 'drop_db':
  315.                 PMA_relationsCleanupDatabase($selected[$i]);
  316.                 $a_query   = 'DROP DATABASE '
  317.                            . PMA_backquote(urldecode($selected[$i]));
  318.                 $reload    = 1;
  319.                 $run_parts = TRUE;
  320.                 break;
  321.  
  322.             case 'drop_tbl':
  323.                 PMA_relationsCleanupTable($db, $selected[$i]);
  324.         $current = urldecode($selected[$i]);
  325.         if (!empty($views) && in_array($current, $views)) {
  326.             $sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ')
  327.                               . PMA_backquote($current);
  328.                 } else {
  329.                     $sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ')
  330.                                . PMA_backquote($current);
  331.                 }
  332.                 $reload    = 1;
  333.                 break;
  334.  
  335.             case 'check_tbl':
  336.                 $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ')
  337.                            . PMA_backquote(urldecode($selected[$i]));
  338.                 $use_sql    = TRUE;
  339.                 break;
  340.  
  341.             case 'optimize_tbl':
  342.                 $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ')
  343.                            . PMA_backquote(urldecode($selected[$i]));
  344.                 $use_sql    = TRUE;
  345.                 break;
  346.  
  347.             case 'analyze_tbl':
  348.                 $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ')
  349.                            . PMA_backquote(urldecode($selected[$i]));
  350.                 $use_sql    = TRUE;
  351.                 break;
  352.  
  353.             case 'repair_tbl':
  354.                 $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ')
  355.                            . PMA_backquote(urldecode($selected[$i]));
  356.                 $use_sql    = TRUE;
  357.                 break;
  358.  
  359.             case 'empty_tbl':
  360.                 if (PMA_MYSQL_INT_VERSION >= 40000) {
  361.                     $a_query = 'TRUNCATE ';
  362.                 } else {
  363.                     $a_query = 'DELETE FROM ';
  364.                 }
  365.                 $a_query .= PMA_backquote(htmlspecialchars(urldecode($selected[$i])));
  366.                 $run_parts = TRUE;
  367.                 break;
  368.  
  369.             case 'drop_fld':
  370.                 PMA_relationsCleanupColumn($db, $table, $selected[$i]);
  371.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) : ',')
  372.                            . ' DROP ' . PMA_backquote(urldecode($selected[$i]))
  373.                            . (($i == $selected_cnt-1) ? ';' : '');
  374.                 break;
  375.  
  376.             case 'primary_fld':
  377.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ( empty($primary) ? '' : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' : ', ')
  378.                            . PMA_backquote(urldecode($selected[$i]))
  379.                            . (($i == $selected_cnt-1) ? ');' : '');
  380.                 break;
  381.  
  382.             case 'index_fld':
  383.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX( ' : ', ')
  384.                            . PMA_backquote(urldecode($selected[$i]))
  385.                            . (($i == $selected_cnt-1) ? ');' : '');
  386.                 break;
  387.  
  388.             case 'unique_fld':
  389.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE( ' : ', ')
  390.                            . PMA_backquote(urldecode($selected[$i]))
  391.                            . (($i == $selected_cnt-1) ? ');' : '');
  392.                 break;
  393.  
  394.             case 'fulltext_fld':
  395.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT( ' : ', ')
  396.                            . PMA_backquote(urldecode($selected[$i]))
  397.                            . (($i == $selected_cnt-1) ? ');' : '');
  398.                 break;
  399.         } // end switch
  400.  
  401.         // All "DROP TABLE","DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE"
  402.         // statements will be run at once below
  403.         if ($run_parts) { 
  404.             $sql_query .= $a_query . ';' . "\n";
  405.             if ($query_type != 'drop_db') {
  406.                 PMA_DBI_select_db($db);
  407.             }
  408.             $result = @PMA_DBI_query($a_query) or PMA_mysqlDie('', $a_query, FALSE, $err_url);
  409.         } // end if
  410.     } // end for
  411.  
  412.     if ($query_type == 'drop_tbl') {
  413.         if (!empty($sql_query)) {
  414.         $sql_query .= ';';
  415.     } else if (!empty($sql_query_views)) {
  416.         $sql_query = $sql_query_views . ';';
  417.             unset($sql_query_views);
  418.         }
  419.     }
  420.  
  421.     if ($use_sql) {
  422.         require('./sql.php');
  423.     } elseif (!$run_parts) {
  424.         PMA_DBI_select_db($db);
  425.         $result = PMA_DBI_query($sql_query);
  426.     if (!empty($sql_query_views)) {
  427.         $sql_query .= ' ' . $sql_query_views . ';';
  428.         PMA_DBI_query($sql_query_views);
  429.         unset($sql_query_views);
  430.     }
  431.     }
  432.  
  433. }
  434.  
  435. ?>
  436.